package com.zjcloud.academic.domain;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.zjcloud.common.annotation.Excel;
import com.zjcloud.common.core.domain.BaseEntity;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import java.util.Date;
import java.util.List;

/**
 * 代码生成业务表 gen_table
 * 
 * @author zjcloud
 * @date 2025-01-01
 */
@Data
public class GenTable extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 编号 */
    private Long tableId;

    /** 表名称 */
    @NotBlank(message = "表名称不能为空")
    @Excel(name = "表名称")
    private String tableName;

    /** 表描述 */
    @NotBlank(message = "表描述不能为空")
    @Excel(name = "表描述")
    private String tableComment;

    /** 实体类名称 */
    @NotBlank(message = "实体类名称不能为空")
    @Excel(name = "实体类名称")
    private String className;

    /** 使用的模板（crud单表操作 tree树表操作） */
    @Excel(name = "使用的模板", readConverterExp = "crud=单表操作,tree=树表操作")
    private String tplCategory;

    /** 生成包路径 */
    @NotBlank(message = "生成包路径不能为空")
    @Excel(name = "生成包路径")
    private String packageName;

    /** 生成模块名 */
    @NotBlank(message = "生成模块名不能为空")
    @Excel(name = "生成模块名")
    private String moduleName;

    /** 生成业务名 */
    @NotBlank(message = "生成业务名不能为空")
    @Excel(name = "生成业务名")
    private String businessName;

    /** 生成功能名 */
    @NotBlank(message = "生成功能名不能为空")
    @Excel(name = "生成功能名")
    private String functionName;

    /** 生成功能作者 */
    @NotBlank(message = "生成功能作者不能为空")
    @Excel(name = "生成功能作者")
    private String functionAuthor;

    /** 生成代码方式（0zip压缩包 1自定义路径） */
    @Excel(name = "生成代码方式", readConverterExp = "0=zip压缩包,1=自定义路径")
    private String genType;

    /** 生成路径（不填默认项目路径） */
    @Excel(name = "生成路径")
    private String genPath;

    /** 主键信息 */
    private GenTableColumn pkColumn;

    /** 表列信息 */
    @Valid
    private List<GenTableColumn> columns;

    /** 其它生成选项 */
    private String options;

    /** 树编码字段 */
    private String treeCode;

    /** 树父编码字段 */
    private String treeParentCode;

    /** 树名称字段 */
    private String treeName;

    /** 上级菜单ID字段 */
    private String parentMenuId;

    /** 上级菜单名称字段 */
    private String parentMenuName;

    /** 创建者 */
    private String createBy;

    /** 创建时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    /** 更新者 */
    private String updateBy;

    /** 更新时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;
}